//
//  Comunicacion.m
//  ProyectoMoviTiendas
//
//  Created by Daniel Paez on 4/3/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "Comunicacion.h"
#import "Barrio.h"
#import "Tienda.h"
#import "CategoriaTienda.h"
#import "SubcategoriaTienda.h"
#import "Item.h"
#import "Producto.h"

@implementation Comunicacion

+ (NSMutableArray *) cargarBarrios
{
    
    NSMutableArray * barrios = [[NSMutableArray alloc] init];
 	
	NSLog(@"Iniciando cargar de barrios desde DB...");
	
	
	NSString *urlString = @"http://francoal.com.co/consultaBarrios.php";	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];		
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando los barrios");
        return nil;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:kNilOptions error:nil];
    
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_BARRIO"];
    
    for (NSString * nombre in nombres)
    {
            
        [barrios addObject:[[Barrio alloc] initConNombre:nombre]];
    }
    
    if(datos != nil)
    {
        NSLog(@"Barrios cargados correctamente");
    }
    return barrios;
}

+ (void) cargarTiendasDeBarrio: (Barrio *) barrio
{
    
    // Si hay tiendas cargadas, no hace nada.
 	if (barrio.tiendas.count) {
        return;
    }
    
	NSLog(@"Iniciando cargar de tiendas del barrio %@ desde DB...", barrio.nombre);
	
    NSString * parametro = [barrio.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    
	NSString *urlString = [NSString stringWithFormat: @"http://francoal.com.co/consultaTiendas.php?barrio=%@",parametro];	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];
  
    NSString *datos_string = [[NSString alloc] initWithData:datos encoding:NSUTF8StringEncoding];
    NSLog(@"Diccionario debería ser: %@", datos_string);
    
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando las tiendas");
        return;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:NSJSONReadingAllowFragments error:nil];
    
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_TIENDA"];
    NSArray * descripcion = [resultsDictionary valueForKey:@"DESCRIPCION"];
    NSArray * direccion = [resultsDictionary valueForKey:@"DIRECCION"];
    NSArray * telefono = [resultsDictionary valueForKey:@"TELEFONO"];
    NSArray * horaAbrir = [resultsDictionary valueForKey:@"HORA_ABRIR"];
    NSArray * horaCerrar = [resultsDictionary valueForKey:@"HORA_CERRAR"];
    NSArray * diasAbierto = [resultsDictionary valueForKey:@"DIAS_ABIERTO"];

    
    [barrio.tiendas removeAllObjects];
    for (int i = 0; i < nombres.count; i++)
    {
        Tienda * tienda = [[Tienda alloc] init];
        
        tienda.nombre = [nombres objectAtIndex:i];
        tienda.descripcion = [descripcion objectAtIndex:i];
        tienda.direccion = [direccion objectAtIndex:i];
        tienda.telefono = [telefono objectAtIndex:i];
        tienda.horaAbrir = [[horaAbrir objectAtIndex:i] intValue];
        tienda.horaCerrar = [[horaCerrar objectAtIndex:i] intValue];
        tienda.diasAbierto = [[diasAbierto objectAtIndex:i] intValue];
        
        [barrio.tiendas addObject:tienda];
    }
    
    if(datos != nil)
    {
        NSLog(@"Tienda cargada correctamente");
    }

  
}

+(void) cargarCategoriasDeTienda: (Tienda *) tienda
{
    
    if (tienda.categorias.count) {
        return;
    }
    
	NSLog(@"Iniciando carga de categorias dela tienda %@ desde DB...", tienda.nombre);
	
    NSString * parametro = [tienda.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    
	NSString *urlString = [NSString stringWithFormat: @"http://francoal.com.co/consultaCategorias.php?tienda=%@",parametro];	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];
    
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando las categorias");
        return;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:kNilOptions error:nil];
    
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_CATEGORIA"];
    
    [tienda.categorias removeAllObjects];
    for (int i = 0; i < nombres.count; i++)
    {
        CategoriaTienda * categ = [[CategoriaTienda alloc] init];
        categ.nombre = [nombres objectAtIndex:i];
        categ.nombreTienda = tienda.nombre;
        
        [tienda.categorias addObject:categ];
    }
    
    if(datos != nil)
    {
        NSLog(@"Categoria cargada correctamente");
    }
}

+(void) cargarSubcategoriasDeCategoria: (CategoriaTienda *) categoria conTienda:(Tienda *) tienda
{
    if(categoria.subcategorias.count)
    {
        return;
    }
    
	NSLog(@"Iniciando carga de subcategorias dela tienda %@ desde DB...", tienda.nombre);
	
    NSString * parametro1 = [tienda.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    NSString * parametro2 = [categoria.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    
	NSString *urlString = [NSString stringWithFormat: @"http://francoal.com.co/consultaSubcategorias.php?tienda=%@&categoria=%@",parametro1,parametro2];	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];
    
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando las subcategorias");
        return;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:kNilOptions error:nil];
    
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_SUBCATEGORIA"];
    
    [categoria.subcategorias removeAllObjects];
    for (int i = 0; i < nombres.count; i++)
    {
        SubcategoriaTienda * subcateg = [[SubcategoriaTienda alloc] init];
        subcateg.nombre = [nombres objectAtIndex:i];
        subcateg.nombreTienda = tienda.nombre;
        [categoria.subcategorias addObject:subcateg];
    }
    
    if(datos != nil)
    {
        NSLog(@"Subcategorias cargada correctamente");
    }
}

+(void) cargarItemsDeSubcategoria: (SubcategoriaTienda *) subcategoria conTienda:(Tienda *) tienda
{
    if(subcategoria.items.count)
    {
        return;
    }
    
	NSLog(@"Iniciando carga de items de la subcategoria %@ desde DB...", subcategoria.nombre);
	
    NSString * parametro2 = [tienda.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    NSString * parametro1 = [subcategoria.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    
	NSString *urlString = [NSString stringWithFormat: @"http://francoal.com.co/consultaItems.php?subcategoria=%@&tienda=%@",parametro1,parametro2];	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];
    
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando los items");
        return;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:kNilOptions error:nil];
    
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_PRODUCTO"];
    NSArray * precios = [resultsDictionary valueForKey:@"PRECIO_UNITARIO"];
    NSArray * urlImagenes = [resultsDictionary valueForKey:@"URL_IMAGEN"];
    
    [subcategoria.items removeAllObjects];
    for (int i = 0; i < nombres.count; i++)
    {
        Producto * prod = [[Producto alloc] init];
        prod.nombre = [nombres objectAtIndex:i];
        NSString * urlImagen = [urlImagenes objectAtIndex:i];
        prod.imagen = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlImagen]]];
        
        Item * item = [[Item alloc] initConCantidad:-1 conPrecio:[[precios objectAtIndex:i] intValue] conProducto:prod conTienda:tienda];
        [subcategoria.items addObject:item];
    }
    
    if(datos != nil)
    {
        NSLog(@"Subcategorias cargada correctamente");
    }
}

+ (NSMutableArray * ) buscarProducto: (NSString *) nombreProd EnTienda:(Tienda *) tienda
{
    
	NSLog(@"Realizando busqueda del producto %@ ", nombreProd);
	
    NSString * parametro1 = [nombreProd stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    NSString * parametro2 = [tienda.nombre stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    
	NSString *urlString = [NSString stringWithFormat: @"http://francoal.com.co/consultaItemsPalabraClave.php?palabra=%@&tienda=%@",parametro1,parametro2];	
	NSURL *url = [NSURL URLWithString:urlString];
	NSData *datos = [[NSData alloc] initWithContentsOfURL:url];
    
    
    //Si no se pueden cargar los datos. Se aborta el proceso sin alterar lo que existia en memoria principal.
    if (datos == nil) {
        NSLog(@"Error cargando los items");
        return nil;
    }
    NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:datos options:kNilOptions error:nil];
    
      
    NSLog(@"NSDictionary returned: %@",resultsDictionary);
    
    NSArray * nombres = [resultsDictionary valueForKey:@"NOMBRE_PRODUCTO"];
    NSArray * precios = [resultsDictionary valueForKey:@"PRECIO_UNITARIO"];
    NSArray * urlImagenes = [resultsDictionary valueForKey:@"URL_IMAGEN"];
    NSMutableArray * items = [[NSMutableArray alloc] initWithCapacity:nombres.count];
    
  
    for (int i = 0; i < nombres.count; i++)
    {
        Producto * prod = [[Producto alloc] init];
        prod.nombre = [nombres objectAtIndex:i];
        
        NSString * urlImagen = [urlImagenes objectAtIndex:i];
        prod.imagen = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlImagen]]];
        
        Item * item = [[Item alloc] initConCantidad:-1 conPrecio:[[precios objectAtIndex:i] intValue] conProducto:prod conTienda:tienda];
        [items addObject:item];
    }
    
    if(datos != nil)
    {
        NSLog(@"Subcategorias cargada correctamente");
    }
    
    return items;
}

@end
